package com.gitee.deament.server.core.cli;

import cn.hutool.core.util.StrUtil;

import com.gitee.deament.server.core.data.ConnectData;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;

import java.util.ArrayList;
import java.util.List;

/**
 * 抽象命令
 */
public abstract class AbstractCli {

    /**
     * 执行命令 会又判断是否需要登录
     * @param channelHandlerContext
     * @param command
     */
    public void execute(ChannelHandlerContext channelHandlerContext, String command) {
        //监测 是否需要登录
        if(checkIsLogin()&& !isLogin(channelHandlerContext)){
            channelHandlerContext.channel().writeAndFlush(new TextWebSocketFrame("(error) NOAUTH Authentication required."));
            return ;
        }
        executeCli(channelHandlerContext, command);
    }


    /**
     * 执行命令操作
     */
    public abstract void executeCli(ChannelHandlerContext channelHandlerContext, String command) ;

    /**
     * 解析命令 ，list.get(0) 是命令 其他的应该是参数 或者是二级的命令
     *
     * @param command
     * @return
     */
    public List<String> getValues(String command) {
        String[] valuesStrArray = command.trim().split(" ");
        List<String> list = new ArrayList<>(4);
        for (String value : valuesStrArray) {
            if (StrUtil.isNotBlank(value)) {
                list.add(value.trim());
            }
        }
        return list;

    }

    private  boolean isLogin(ChannelHandlerContext channelHandlerContext) {
        return ConnectData.USER_STORAGE.checkIsAuth(channelHandlerContext.channel().id().asLongText());
    }

    public boolean checkIsLogin(){
        return true;
    }


}